#pragma once 

#include "HSModelAPI.h"
#include "HeightMap.h" 
#include "GeometryUtils.h"
#include "GenerateSurface.h"
#include "Model3D.h"

enum EDirections 
  {
  D_DOWN = -1,
  D_NONE = 0,
  D_UP = 1 
  };

namespace HeightMapUtils
  {
  HSMODEL_API void GetPointsThatWillBeChanged(std::vector<TVector3>& o_changed_points, HeightMap& io_HeightMap, size_t i_base_x, size_t i_base_y, size_t i_x, size_t i_y, EDirections i_direction, double i_base_heightchange, std::vector<std::vector<bool>>& i_visited);
  HSMODEL_API void CreateHill(HeightMap& io_HeightMap, size_t i_coordinate_x, size_t i_coordinate_y, double i_base_heightchange, EDirections i_direction);
  HSMODEL_API double CalculateHeightChangeWithGaussDistribution (size_t i_x, size_t i_y, size_t i_x_base, size_t i_y_base, double i_base_heightchange);
  HSMODEL_API void GetTrianglesThatWillBeChanged(Model3D& o_changed_triangles, HeightMap& i_height_map, TVector2 i_point, double i_height_changed, EDirections i_direction);
  };